// DataAdapter.java
package com.ren.service;

import com.ren.model.ListItem;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import java.lang.reflect.Type;
import java.util.List;
import java.util.ArrayList;

/**
 * 数据适配器
 * 负责在不同数据格式之间进行转换
 */
public class DataAdapter {

    private Gson gson;
    private MarkdownProcessor markdownProcessor;

    public DataAdapter() {
        this.gson = new Gson();
        this.markdownProcessor = new MarkdownProcessor();
    }

    /**
     * 将JSON格式的数据转换为Markdown文本
     * @param json JSON格式的数据
     * @return Markdown文本
     */
    public String convertJsonToMarkdown(String json) {
        try {
            if (json == null || json.isEmpty() || "[]".equals(json)) {
                return "1. ";
            }

            Type listType = new TypeToken<List<ListItem>>(){}.getType();
            List<ListItem> items = gson.fromJson(json, listType);

            if (items == null) {
                items = new ArrayList<>();
            }

            // 如果列表为空，添加一个默认项
            if (items.isEmpty()) {
                items.add(new ListItem(""));
            }

            return markdownProcessor.convertListItemsToMarkdown(items);
        } catch (Exception e) {
            // 如果解析失败，返回默认内容
            return "1. ";
        }
    }

    /**
     * 将Markdown文本转换为JSON格式的数据
     * @param markdown Markdown文本
     * @return JSON格式的数据
     */
    public String convertMarkdownToJson(String markdown) {
        try {
            List<ListItem> items = markdownProcessor.parseMarkdownToListItems(markdown);

            // 如果没有列表项，确保返回空数组而不是null
            if (items == null) {
                items = new ArrayList<>();
            }

            return gson.toJson(items);
        } catch (Exception e) {
            // 如果转换失败，返回空数组
            return "[]";
        }
    }

    /**
     * 将ListItem列表转换为JSON
     * @param items ListItem列表
     * @return JSON字符串
     */
    public String convertListItemsToJson(List<ListItem> items) {
        try {
            if (items == null) {
                items = new ArrayList<>();
            }
            return gson.toJson(items);
        } catch (Exception e) {
            return "[]";
        }
    }

    /**
     * 将JSON转换为ListItem列表
     * @param json JSON字符串
     * @return ListItem列表
     */
    public List<ListItem> convertJsonToListItems(String json) {
        try {
            if (json == null || json.isEmpty() || "[]".equals(json)) {
                return new ArrayList<>();
            }

            Type listType = new TypeToken<List<ListItem>>(){}.getType();
            List<ListItem> items = gson.fromJson(json, listType);

            return items != null ? items : new ArrayList<>();
        } catch (Exception e) {
            return new ArrayList<>();
        }
    }
}
